package com.problem.sort;

import java.util.*;

/**
 * https://leetcode-cn.com/problems/valid-anagram/
 */
public class ValidAnagram {
    //给定两个字符串 s 和 t ，编写一个函数来判断 t 是否是 s 的字母异位词。
    //
    //示例 1:
    //
    //输入: s = "anagram", t = "nagaram"
    //输出: true
    //示例 2:
    //
    //输入: s = "rat", t = "car"
    //输出: false
    //说明:
    //你可以假设字符串只包含小写字母。
    //
    //进阶:
    //如果输入字符串包含 unicode 字符怎么办？你能否调整你的解法来应对这种情况？

    public boolean isAnagram(String s, String t) {
        if (s.length() != t.length()) {
            return false;
        }
        byte[] sb = s.getBytes();
        byte[] tb = t.getBytes();
        Arrays.sort(sb);
        Arrays.sort(tb);

        for (int i=0;i<s.length();i++) {
            if (sb[i] != tb[i]) {
                return false;
            }
        }

        return true;
    }

    public boolean isAnagram1(String s, String t) {
        if (s.length() != t.length()) {
            return false;
        }
        List<Byte> list = new ArrayList<>();
        for (Byte b : s.getBytes()) {
            list.add(b);
        }

        for (Byte b : t.getBytes()) {
            if(!list.remove(b)){
                return false;
            }
        }

        return true;
    }

    public boolean isAnagram2(String s, String t) {
        if (s.length() != t.length()) {
            return false;
        }
        byte[] sb = s.getBytes();
        byte[] tb = t.getBytes();
        Arrays.sort(sb);
        Arrays.sort(tb);
        s = new String(sb);
        t = new String(tb);
        return s.equals(t);
    }
    public static void main(String[] args) {
        ValidAnagram va = new ValidAnagram();
        String s = "abc";
        String t = "abc";
        System.out.println(va.isAnagram2(s,t));
    }
}

